home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 551-575 / disk_570 / gadtoolsbox / source / source.lha / ScreenSpecial.c < prev    next >
C/C++ Source or Header  |  1991-11-04  |  8KB  |  243 lines

  1. /*-- AutoRev header do NOT edit!
  2. *
  3. *   Program         :   ScreenSpecial.c
  4. *   Copyright       :   © Copyright 1991 Jaba Development
  5. *   Author          :   Jan van den Baard
  6. *   Creation Date   :   21-Oct-91
  7. *   Current version :   1.00
  8. *   Translator      :   DICE v2.6
  9. *
  10. *   REVISION HISTORY
  11. *
  12. *   Date          Version         Comment
  13. *   ---------     -------         ------------------------------------------
  14. *   21-Oct-91     1.00            Screen Special requester.
  15. *
  16. *-- REV_END --*/
  17.  
  18. #include "GTEd.h"
  19. #include "Protos.h"
  20.  
  21. /*
  22.  * --- External referenced data.
  23.  */
  24. extern ULONG             Class;
  25. extern UWORD             Code;
  26. extern struct TextAttr   Topaz80;
  27. extern APTR              MainVisualInfo;
  28. extern struct Screen    *MainScreen;
  29. extern struct Window    *MainWindow;
  30. extern struct Gadget    *Object;
  31. extern BOOL              Saved;
  32. extern struct TagItem    MainSTags[];
  33. extern struct Rectangle  CustomRect;
  34.  
  35. /*
  36.  * --- Gadget ID
  37.  */
  38. #define GD_SCROLL       0
  39. #define GD_TYPE         1
  40. #define GD_OK           2
  41. #define GD_CANCEL       3
  42.  
  43.  
  44. /*
  45.  * --- Module data.
  46.  */
  47. struct Window           *cs_Wnd   = NULL;
  48. struct Gadget           *cs_GList = NULL;
  49. struct Gadget           *cs_Gadgets[ 2 ];
  50. WORD                     cs_Zoom[4];
  51.  
  52. BOOL                     cs_AutoScroll = FALSE;
  53. UWORD                    cs_ScreenType = 2;
  54.  
  55. UBYTE                   *cs_Types[] = {
  56.     "WBENCHSCREEN", "PUBLICSCREEN", "CUSTOMSCREEN", 0l };
  57.  
  58. struct TagItem           cs_nwTags[] = {
  59.     WA_Left,                0l,
  60.     WA_Top,                 0l,
  61.     WA_Width,               0l,
  62.     WA_Height,              0l,
  63.     WA_IDCMP,               IDCMP_CLOSEWINDOW | BUTTONIDCMP | CHECKBOXIDCMP | INTEGERIDCMP | IDCMP_VANILLAKEY | IDCMP_REFRESHWINDOW,
  64.     WA_Flags,               WFLG_DRAGBAR | WFLG_DEPTHGADGET| WFLG_CLOSEGADGET | WFLG_ACTIVATE | WFLG_RMBTRAP | WFLG_SMART_REFRESH,
  65.     WA_Gadgets,             0l,
  66.     WA_Title,               "Edit Special Screen Tags:",
  67.     WA_AutoAdjust,          TRUE,
  68.     WA_Zoom,                (Tag)cs_Zoom,
  69.     TAG_DONE };
  70.  
  71. /*
  72.  * --- Display the ScreenSpecial requester.
  73.  */
  74. long ScreenSpecial( void )
  75. {
  76.     struct Gadget       *g;
  77.     struct NewGadget     ng;
  78.     BOOL                 running = TRUE, OK = FALSE, ok = TRUE;
  79.     WORD                 l, t, w, h, btop, bleft;
  80.     BOOL                 AutoScroll;
  81.     UWORD                Type;
  82.  
  83.     AutoScroll   = cs_AutoScroll;
  84.     Type         = cs_ScreenType;
  85.  
  86.     btop  = MainScreen->WBorTop + MainScreen->RastPort.TxHeight;
  87.     bleft = MainScreen->WBorLeft;
  88.  
  89.     w = bleft + MainScreen->WBorRight  + 300;
  90.     h = btop  + MainScreen->WBorBottom + 52;
  91.     l = (( MainScreen->Width  >> 1 ) - ( w >> 1 ));
  92.     t = (( MainScreen->Height >> 1 ) - ( h >> 1 ));
  93.  
  94.     cs_Zoom[0] = 0;
  95.     cs_Zoom[1] = btop;
  96.     cs_Zoom[2] = 200;
  97.     cs_Zoom[3] = btop;
  98.  
  99.     cs_nwTags[0].ti_Data = l;
  100.     cs_nwTags[1].ti_Data = t;
  101.     cs_nwTags[2].ti_Data = w;
  102.     cs_nwTags[3].ti_Data = h;
  103.  
  104.     cs_nwTags[10].ti_Data = (Tag)MainScreen;
  105.  
  106.     if (( MainScreen->Flags & CUSTOMSCREEN) == CUSTOMSCREEN )
  107.         cs_nwTags[10].ti_Tag  = WA_CustomScreen;
  108.     else if (( MainScreen->Flags & PUBLICSCREEN ) == PUBLICSCREEN )
  109.         cs_nwTags[10].ti_Tag  = WA_PubScreen;
  110.     else
  111.         cs_nwTags[10].ti_Tag  = TAG_DONE;
  112.  
  113.     if ( g = CreateContext( &cs_GList )) {
  114.  
  115.         ng.ng_LeftEdge      =   bleft + 8;
  116.         ng.ng_TopEdge       =   btop + 4;
  117.         ng.ng_GadgetText    =   "_AutoScroll";
  118.         ng.ng_TextAttr      =   &Topaz80;
  119.         ng.ng_GadgetID      =   GD_SCROLL;
  120.         ng.ng_Flags         =   PLACETEXT_RIGHT;
  121.         ng.ng_VisualInfo    =   MainVisualInfo;
  122.  
  123.         g = CreateGadget( CHECKBOX_KIND, g, &ng, GTCB_Checked, (Tag)AutoScroll, GT_Underscore, (Tag)'_', TAG_DONE );
  124.  
  125.         cs_Gadgets[ GD_SCROLL ] = g;
  126.  
  127.         ng.ng_TopEdge       =   btop + 18;
  128.         ng.ng_Width         =   284;
  129.         ng.ng_Height        =   13;
  130.         ng.ng_GadgetText    =   0l;
  131.         ng.ng_GadgetID      =   GD_TYPE;
  132.  
  133.         g = CreateGadget( CYCLE_KIND, g, &ng, GTCY_Labels, cs_Types, GTCY_Active, Type, TAG_DONE );
  134.  
  135.         cs_Gadgets[ GD_TYPE ] = g;
  136.  
  137.         ng.ng_TopEdge       =   btop + 35;
  138.         ng.ng_Width         =   60;
  139.         ng.ng_GadgetText    =   "_OK";
  140.         ng.ng_GadgetID      =   GD_OK;
  141.         ng.ng_Flags         =   PLACETEXT_IN;
  142.  
  143.         g = CreateGadget( BUTTON_KIND, g, &ng, GT_Underscore, (Tag)'_', TAG_DONE );
  144.  
  145.         ng.ng_LeftEdge      =   bleft + 232;
  146.         ng.ng_GadgetText    =   "_CANCEL";
  147.         ng.ng_GadgetID      =   GD_CANCEL;
  148.  
  149.         g = CreateGadget( BUTTON_KIND, g, &ng, GT_Underscore, (Tag)'_', TAG_DONE );
  150.  
  151.         if ( g ) {
  152.  
  153.             cs_nwTags[6].ti_Data = (Tag)cs_GList;
  154.  
  155.             if ( cs_Wnd = OpenWindowTagList( NULL, cs_nwTags )) {
  156.  
  157.                 cs_Zoom[0] = l;
  158.                 cs_Zoom[1] = t;
  159.                 cs_Zoom[2] = w;
  160.                 cs_Zoom[3] = h;
  161.  
  162.                 GT_RefreshWindow( cs_Wnd, NULL );
  163.  
  164.                 do {
  165.                     WaitPort( cs_Wnd->UserPort );
  166.  
  167.                     while ( ReadIMsg( cs_Wnd )) {
  168.  
  169.                         switch ( Class ) {
  170.  
  171.                             case    IDCMP_REFRESHWINDOW:
  172.                                 GT_BeginRefresh( cs_Wnd );
  173.                                 GT_EndRefresh( cs_Wnd, TRUE );
  174.                                 break;
  175.  
  176.                             case    IDCMP_CLOSEWINDOW:
  177.                                 running = FALSE;
  178.                                 break;
  179.  
  180.                             case    IDCMP_VANILLAKEY:
  181.                                 switch ( Code ) {
  182.  
  183.                                     case    'a':
  184.                                         FlipFlop( cs_Wnd, cs_Gadgets, GD_SCROLL, &AutoScroll );
  185.                                         break;
  186.  
  187.                                     case    'o':
  188.                                         goto Ok;
  189.  
  190.                                     case    'c':
  191.                                         goto Cancel;
  192.                                 }
  193.                                 break;
  194.  
  195.                             case    IDCMP_GADGETUP:
  196.                                 switch ( Object->GadgetID ) {
  197.  
  198.                                     case    GD_SCROLL:
  199.                                         FlipFlop( 0l, 0l, 0l, &AutoScroll );
  200.                                         break;
  201.  
  202.                                     case    GD_TYPE:
  203.                                         if ( Type++ == 2 )
  204.                                             Type = 0l;
  205.                                         break;
  206.  
  207.                                     case    GD_OK:
  208.                                         Ok:
  209.                                         OK = TRUE;
  210.                                         running = FALSE;
  211.                                         break;
  212.  
  213.                                     case    GD_CANCEL:
  214.                                         Cancel:
  215.                                         running = FALSE;
  216.                                         break;
  217.                                 }
  218.                                 break;
  219.                         }
  220.                     }
  221.                 } while ( running );
  222.             }
  223.         }
  224.     }
  225.  
  226.     if ( OK ) {
  227.         cs_AutoScroll = AutoScroll;
  228.         cs_ScreenType = Type;
  229.  
  230.         Saved = FALSE;
  231.     }
  232.  
  233.     if ( cs_Wnd )           CloseWindow( cs_Wnd );
  234.     if ( cs_GList )         FreeGadgets( cs_GList );
  235.  
  236.     cs_Wnd   = 0l;
  237.     cs_GList = 0l;
  238.  
  239.     ClearMsgPort( MainWindow->UserPort );
  240.  
  241.     return( ok );
  242. }
  243.